package ventanas;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import controladores.ControladorABMObraSocial;
import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import javax.swing.JList;
import javax.swing.JButton;
import negocio.ObraSocial;
import negocio.PlanCobertura;
import java.awt.Font;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.RowSpec;
import javax.swing.JCheckBox;
import javax.swing.JScrollPane;

public class VentanaABMObraSocial extends JFrame {
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private final JLabel lblObraSocial = new JLabel("Obra Social");
	private final JLabel lblNombre = new JLabel("Nombre: ");
	private final JLabel lblTelefono = new JLabel("Tel\u00E9fono:");
	private final JLabel lblWeb = new JLabel("Web:");
	private final JTextField txtNombreOS = new JTextField();
	private final JTextField txtWeb = new JTextField();
	private final JPanel panel_1 = new JPanel();
	private final JTextField txtTelefono = new JTextField();
	private final JPanel panel = new JPanel();
	private final JLabel lblNombre_1 = new JLabel("Nombre:");
	private final JTextField txtNombrePlan = new JTextField();
	private final JLabel lblCobertura = new JLabel("Cobertura:");
	private final JLabel label = new JLabel("%");
	private final JList<PlanCobertura> lista = new JList<PlanCobertura>();
	private final JButton btnAgregarPlan = new JButton("Agregar Plan");
	private final JButton btnQuitarPlan = new JButton("Quitar Plan");
	private final JButton btnGuardarModificaciones = new JButton("Guardar Modificaciones");
	private final JButton btnBajaOS = new JButton("Dar De Baja Obra Social");
	private final JButton btnCancelar = new JButton("Cancelar");
	private final JPanel panel_2 = new JPanel();
	private ControladorABMObraSocial controlador;
	private ObraSocial os;
	private final JSpinner spinnerCobertura = new JSpinner();
	private final JCheckBox chckbxEditarObraSocial = new JCheckBox("Editar Obra Social");
	private VentanaBusquedaObrasSociales v;
	private final JScrollPane scrollPane = new JScrollPane();
	
	public VentanaABMObraSocial(ObraSocial obraSocial) {
		setTitle("Obra Social");
		os = obraSocial;
		controlador = new ControladorABMObraSocial(this, os);
		agregarActionListeners();
		initGUI();
		cargarDatosPrevios();
	}
	
	private void initGUI() {
		this.setVisible(true);
		txtNombrePlan.setBounds(106, 24, 103, 20);
		txtNombrePlan.setColumns(10);
		txtTelefono.setBounds(353, 25, 121, 20);
		txtTelefono.setColumns(10);
		lblNombre.setBounds(27, 28, 69, 14);
		panel_1.setBounds(10, 11, 505, 112);
		panel_2.add(panel_1);
		panel_1.setBorder(new TitledBorder(null, "Datos Obra Social",
				TitledBorder.LEFT, TitledBorder.TOP, null, null));
		panel_1.add(lblNombre);
		txtNombreOS.setBounds(91, 25, 158, 20);
		panel_1.add(txtNombreOS);
		txtNombreOS.setColumns(10);
		lblWeb.setBounds(27, 69, 32, 14);
		panel_1.add(lblWeb);
		txtWeb.setBounds(91, 66, 383, 20);
		panel_1.add(txtWeb);
		txtWeb.setColumns(10);
		lblTelefono.setBounds(275, 28, 66, 14);
		panel_1.add(lblTelefono);
		setBounds(100, 100, 629, 534);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(new FormLayout(new ColumnSpec[] {
				FormFactory.UNRELATED_GAP_COLSPEC,
				ColumnSpec.decode("167px"),
				ColumnSpec.decode("54px"),
				ColumnSpec.decode("38px"),
				ColumnSpec.decode("41px"),
				ColumnSpec.decode("250px"),},
			new RowSpec[] {
				FormFactory.PARAGRAPH_GAP_ROWSPEC,
				RowSpec.decode("14px"),
				FormFactory.PARAGRAPH_GAP_ROWSPEC,
				RowSpec.decode("23px"),
				FormFactory.UNRELATED_GAP_ROWSPEC,
				RowSpec.decode("304px"),
				RowSpec.decode("29px"),
				RowSpec.decode("23px"),}));
		lblObraSocial.setFont(new Font("Tahoma", Font.PLAIN, 14));
		contentPane.add(lblObraSocial, "4, 2, 3, 1, left, fill");
		
		contentPane.add(chckbxEditarObraSocial, "2, 4, center, default");
		contentPane.add(btnGuardarModificaciones, "2, 8, 3, 1, fill, top");
		contentPane.add(btnCancelar, "6, 8, fill, top");
		panel_2.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		contentPane.add(panel_2, "2, 6, 5, 1, fill, fill");
		panel_2.setLayout(null);
		panel_1.setLayout(null);
		panel_1.add(txtTelefono);
		panel.setBounds(10, 134, 505, 121);
		panel_2.add(panel);
		panel.setBorder(new TitledBorder(null, "Datos de los Planes de Cobertura", TitledBorder.LEFT, 
				TitledBorder.TOP, null, null));
		panel.setLayout(null);
		lblNombre_1.setBounds(28, 27, 66, 14);
		panel.add(lblNombre_1);
		panel.add(txtNombrePlan);
		lblCobertura.setBounds(28, 58, 66, 14);
		panel.add(lblCobertura);
		label.setBounds(177, 57, 22, 14);
		panel.add(label);
		scrollPane.setBounds(294, 25, 199, 84);
		
		panel.add(scrollPane);
		scrollPane.setViewportView(lista);
		lista.setModel(new DefaultListModel<PlanCobertura>());
		btnAgregarPlan.setBounds(26, 87, 118, 23);
		panel.add(btnAgregarPlan);
		btnQuitarPlan.setBounds(173, 86, 109, 23);
		panel.add(btnQuitarPlan);
		spinnerCobertura.setModel(new SpinnerNumberModel(new Float(0), new Float(0), new Float(100), new Float(1)));
		spinnerCobertura.setBounds(116, 57, 41, 20);
		panel.add(spinnerCobertura);
		btnBajaOS.setBounds(35, 268, 177, 23);
		panel_2.add(btnBajaOS);
		this.setLocationRelativeTo(null);
		this.pack();
	}

	public void cargarDatosPrevios(){
		if(os!=null){
			DefaultListModel<PlanCobertura> modelo = (DefaultListModel<PlanCobertura>) lista.getModel();
			txtNombreOS.setText(os.getNombre());
			txtTelefono.setText(""+os.getTelefono());
			txtWeb.setText(os.getSitioWeb());
			
			for(PlanCobertura p:os.getPlanes()){
				modelo.addElement(p);
			}
			lista.revalidate();
			deshabilitarCampos();
		}
	}
	
	private void agregarActionListeners(){
		btnAgregarPlan.addActionListener(controlador);
		btnBajaOS.addActionListener(controlador);
		btnCancelar.addActionListener(controlador);
		btnGuardarModificaciones.addActionListener(controlador);
		btnQuitarPlan.addActionListener(controlador);
		chckbxEditarObraSocial.addActionListener(controlador);
	}
	
	public void deshabilitarCampos(){
		txtNombreOS.setEditable(false);
		txtTelefono.setEditable(false);
		txtWeb.setEditable(false);
		txtNombrePlan.setEditable(false);
		btnAgregarPlan.setEnabled(false);
		btnQuitarPlan.setEnabled(false);
		spinnerCobertura.setEnabled(false);
	}
	
	public void habilitarCampos(){
		txtNombreOS.setEditable(true);
		txtTelefono.setEditable(true);
		txtWeb.setEditable(true);
		txtNombrePlan.setEditable(true);
		btnAgregarPlan.setEnabled(true);
		btnQuitarPlan.setEnabled(true);
		spinnerCobertura.setEnabled(true);
	}
	
	//getters y setters
	public JButton getBtnAgregarPlan() {
		return btnAgregarPlan;
	}

	public JButton getBtnQuitarPlan() {
		return btnQuitarPlan;
	}

	public JCheckBox getChckbxEditarObraSocial() {
		return chckbxEditarObraSocial;
	}

	public JButton getBtnGuardarModificaciones() {
		return btnGuardarModificaciones;
	}

	public JButton getBtnCancelar() {
		return btnCancelar;
	}

	public JTextField getTxtNombreOS() {
		return txtNombreOS;
	}

	public JTextField getTxtWeb() {
		return txtWeb;
	}

	public JTextField getTxtTelefono() {
		return txtTelefono;
	}

	public JButton getBtnBajaOS() {
		return btnBajaOS;
	}

	public JTextField getTxtNombrePlan() {
		return txtNombrePlan;
	}

	public JSpinner getSpinnerCobertura() {
		return spinnerCobertura;
	}

	public ObraSocial getOs() {
		return os;
	}

	public void setOs(ObraSocial os) {
		this.os = os;
	}

	public JList<PlanCobertura> getLista() {
		return lista;
	}

	public VentanaBusquedaObrasSociales getV() {
		return v;
	}

	public void setV(VentanaBusquedaObrasSociales v) {
		this.v = v;
	}
	
	
}
